/*
高精度
简单dp
*/
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct bignum{
    int num[101];
    int len;
    bignum (){memset(num,0,sizeof(num));len=0;}
    bignum operator +(bignum b){
        bignum c;
        for(int i=1,j=0,x;i<=len||i<=b.len||j;i++){
            x=j;j=0;
            if(i<=len)x+=num[i];
            if(i<=b.len)x+=b.num[i];
            if(x>=10)j=1,x-=10;
            c.num[++c.len]=x;
        }
        return c;
    }
    bignum operator *(bignum b){
        bignum c;
        for(int i=1;i<=len;i++){
            int g=0;
            for(int j=1,pos;j<=b.len;j++){
                pos=i+j-1;
                c.num[pos]+=num[i]*b.num[j]+g;
                g=c.num[pos]/10;c.num[pos]%=10;
            }
            if(g)c.num[i+b.len]=g;
        }
        c.len=len+b.len;
        while(!c.num[c.len]&&c.len!=1)c.len--;
        return c;
    }
}num[88],f[88][88],ans;
bool cmp(bignum a,bignum b){
    if(a.len!=b.len)return a.len<b.len;
        for(int i=a.len;i;i--)
            if(a.num[i]!=b.num[i])return a.num[i]<b.num[i];
        return 0;
}
bignum read(){
    bignum x;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9'){
        x.num[++x.len]=c-'0';
        c=getchar();
    }
    reverse(x.num+1,x.num+1+x.len);
    return x;
}
bignum read(int x){
    bignum a;
    while(x){
        a.num[++a.len]=x%10;
        x/=10;
    }
    return a;
}
bignum ksm(int a,int b){
    bignum res=read(1),aa=read(a);
    while(b){
        if(b&1)res=res*aa;
        aa=aa*aa;
        b>>=1;
    }
    return res;
}
void print(bignum x){
    for(int i=x.len;i;i--)putchar(x.num[i]+'0');
}
int main(){
    scanf("%d%d",&n,&m);
    while(n--){
        bignum res;
        for(int i=1;i<=m;i++)num[i]=read();
        for(int len=m-1;len>=1;len--){
            bignum pow_2=ksm(2,m-len);
            for(int l=1;l+len-1<=m;l++){
                f[l][l+len-1]=max(f[l-1][l+len-1]+num[l-1]*pow_2,f[l][l+len]+num[l+len]*pow_2,cmp);
            }
        }
        for(int i=1;i<=m;i++)
        res=max(res,f[i][i]+num[i]*ksm(2,m),cmp);
        ans=ans+res;
    }
    print(ans);
    return 0;
}